import axios from "axios";
import { get } from "@/utils/store";

// 在使用时，灵活导入需要的内容
import { Message } from "element-ui";

import router from "@/router";

// axios.get()
const instance = axios.create({
  baseURL: "http://124.222.71.233:7000", // 基础url  以后发起的请求直接写 接口 即可，没必要写端口号之前的内容
  timeout: 30000, // 过期时间  毫秒为单位
  withCredentials: false, // 涉及跨域请求时，是否携带cookie  默认值false
  // jsonp  cors  代理服务器
});
// instance.get();
// 请求拦截器
instance.interceptors.request.use(
  (config) => {
    console.log("请求被拦截");
    // console.log(config); // config 请求相关的设置
    let token = "";
    try {
      // token = localStorage.getItem("mall");
      token = get("zmall");
    } catch (err) {
      token = "";
    }
    // if 条件写的过于简单/单方向  解决办法：适当增加条件判断
    if (token) {
      config.headers.Authorization = "JWT " + token;
    } else {
      // 跳转
      router.push("/login");
    }
    return config; // 请求拦截器中必须存在return，否则该次请求一直得不到响应
  },
  (err) => {
    console.log("请求被拦截，且失败");
    return Promise.reject(err); // Promise.reject(err)  可以直接创建一个reject的Promise对象
  }
);

// 响应的拦截器
instance.interceptors.response.use(
  (response) => {
    console.log("响应被拦截");
    // console.log(response); // 响应信息
    // ...
    return response;
  },
  (err) => {
    console.log("响应被拦截，且错误");
    let {
      status,
      data: { msg },
    } = err.response;
    // data: msg: {non_field_errors:[] }
    // data: msg : ""
    // 根据后台返回的提示设置前端的提示展示
    let statusMsg = "";
    if (typeof msg === "string") {
      statusMsg = msg;
    } else if (typeof msg === "object") {
      statusMsg = msg["non_field_errors"].join("");
    }

    let errStatus = {
      401: "身份验证失败",
      404: "该请求不存在",
      400: "请求参数存在问题",
      403: "服务器拒绝请求",
      500: "服务器出现异常",
    };
    // 给用户提示
    Message.error(statusMsg || errStatus[status] || "发生了未知错误");

    return Promise.reject(err);
  }
);

export default instance;
